package 树.顺序存储二叉树;

public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        ArrBinaryTree bt = new ArrBinaryTree(arr);
        bt.preOrder(0);// 1 2 4 5 3 6 7
        bt.infixOrder(0);
        bt.postOrder(0);
    }
}
// 编写一个ArrBinaryTree类,实现顺序存储二叉树遍历
class ArrBinaryTree{

    private int[] arr;// 存放数据节点的数组

    public ArrBinaryTree(int[] arr){
        this.arr = arr;
    }

    /**
     * 顺序存储二叉树前序遍历
     * @param index 数组下标
     */

    public void preOrder(int index){
        // 如果数组为空或array.length == 0,直接返回
        if(arr == null || arr.length == 0){
            System.out.println("二叉树为空");
            return;
        }
        System.out.println(arr[index]);
        // 左递归
        if(index*2+1 < arr.length){
            preOrder(2*index+1);
        }
        // 右递归
        if(index*2+2 < arr.length){
            preOrder(index*2 +2);
        }
    }

    /**
     * 顺序存储二叉树中序遍历
     * @param index 数组下标
     */
    public void infixOrder(int index) {
        // 如果数组为空或array.length == 0,直接返回
        if (arr == null || arr.length == 0) {
            System.out.println("二叉树为空");
            return;
        }
        // 左递归
        if(index*2+1 < arr.length){
            preOrder(2*index+1);
        }
        System.out.println(arr[index]);
        // 右递归
        if(index*2+2 < arr.length){
            preOrder(index*2 +2);
        }
    }

    /**
     * 顺序存储二叉树后序遍历
     * @param index 数组下标
     */
    public void postOrder(int index){
        // 如果数组为空或array.length == 0,直接返回
        if (arr == null || arr.length == 0) {
            System.out.println("二叉树为空");
            return;
        }
        // 左递归
        if(index*2+1 < arr.length){
            preOrder(2*index+1);
        }
        if(index*2+2 < arr.length){
            preOrder(index*2 +2);
        }
        System.out.println(arr[index]);
        // 右递归
    }


}


